grep 是查找檔案中內容的指令,在一般的作業情境下, grep 的功能是十分足夠了,但是在開發作業時, grep 的某些預設就顯得比較不合需求,例如只針對特定檔案、不會顯示行數與不會排除 .gitignore 中忽略的檔案等。雖然大部分的功能都可以藉由特定的參數設定完成,但是多了參數就多了需要記憶的部分,也比較不直覺,因此使用一個專為開發設計的查找內容工具是個提升產能的方式。
ripgrep 提供使用者直覺的內容查找指令,利用直觀的使用方式,我們可以輕鬆無負擔的找到需要的資料。
它有下面的特色:
.gitignore ,會將其所設定的範圍排除在搜尋外,並會自動忽略隱藏檔案與 binary 。grep 的功能,像是顯示結果的上下文、搜尋多個 patterns 、搜尋字串的高亮等。使用 Homebrew 安裝 ripgrep :
brew install ripgrep
安裝完成後,就可以使用 rg 指令叫用 ripgrep 了。
rg --help
--help 參數會列出說明供使用者參照。
rg 的使用需要帶有 PATTERN 參數,這就是搜尋的目標。
rg ripgrep
上例的 ripgrep 就是 PATTERN 參數,這個指令會去查找當前目錄下所有檔案內容中有 ripgrep 的結果。

如果想要搜尋特定檔案,可以使用第二個參數指定檔案。
rg ripgrep README.md
上例只會查找 README.md 中的內容。

ripgrep 支援正規表達式的搜尋方式,因此你可以使用正規表達式的語法設定搜尋的 PATTERN 。
rg ' rip\w+'
上例會搜尋 rip 字串前面是空白,並且後面接一個以上字元的結果。
關於正規表達式的設定方式,可以參考 Docs.rs 的文件。
上面就是 ripgrep 主要的使用方式,接下來會介紹幾個常用的搜尋情境供使用者參考。
ripgrep 的搜尋會依照對應的規則忽略特定的檔案,如果在搜尋時,遇到下面的情況,會對其做忽略的動作:
.gitignore (全域及本地)。.ignore ,如果與 .gitignore 衝突,會以 .ignore 為先。.rgignore ,如果與 .ignore 衝突,會以 .rgignore 為先。ripgrep 用 NUL 判斷是否為 binary )。ripgrep 提供了各式的參數,供使用者需要查詢這些忽略檔案時使用:
--no-ignore 將 ignore 檔案包含在搜尋範圍內。--hidden 將隱藏檔案與目錄包含在搜尋範圍內。--text (或 -a )將 binary 包含在搜尋範圍內。--follow (或 -L )將 symlinks 包含在搜尋範圍內。ripgrep 另外提供了 --unrestricted (或 -u )、 -uu 與 -uuu :
-u :搜尋範圍包含 ignore 檔案設定的檔案或目錄。-uu :搜尋範圍包含 ignore 檔案設定與隱藏的檔案或目錄。-uuu :搜尋範圍包含 ignore 檔案設定、隱藏的檔案與 binary 檔案或目錄。如果不知道為什麼找不到目標的結果時,可以使用
--debug參數,它會列出細節供使用者參考。
在指令中使用 -g 參數,可以自己指定搜尋範圍。
rg ripgrep -g '*.md'
上例就只會搜尋 .md 結尾的檔案。
在指令中使用 --type (或 -t )參數,可以設定要搜尋的類型。
rg ripgrep --type md
# equal
rg ripgrep -tmd
上例只會搜尋 md 類型的檔案。
另外,也可以使用 -T 排除特定的類型:
rg ripgrep -Tmd
這樣就不會搜尋 md 類型的檔案了。
grep 預設不是給予開發者使用,因此部分指令會較不直觀,需要特別去記憶,拖慢查找的時間。ripgrep 針對開發時的情境設計指令,因此可以輕鬆且直覺的使用 ripgrep 來針對開發相關的檔案做檢索。ripgrep 指令為 rg 。rg PATTERN 會搜索當前目錄下所有檔案中含有 PATTERN 內容的結果。rg PATTERN PATH 會搜索特定 PATH 中含有 PATTERN 內容的結果。PATTERN 可以是正規表達式。rg 預設搜尋時會忽略部分檔案,其忽略的範圍如下:
--no-ignore 與 -u 。--hidden 。--text 。--follow 。-uu 。-uuu 。-g 指令查找的 glob 。-t 指定查找檔案的類型。-T 指定排除的檔案類型。